package form.validator;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import form.bean.ChangePwdForm;

/**
 * Classe de validation du bean ConnectForm
 * 
 * @author Yannick Lorenzati & Stephanie Malakian
 * 
 */
public class ChangePwdFormValidator implements Validator {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.validation.Validator#supports(java.lang.Class)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean supports(Class clazz) {
		return ChangePwdForm.class.isAssignableFrom(clazz);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.validation.Validator#validate(java.lang.Object,
	 * org.springframework.validation.Errors)
	 */
	@Override
	public void validate(Object obj, Errors e) {

		ChangePwdForm c = (ChangePwdForm) obj;

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "oldPwd", "key",
				"Vous devez saisir votre ancien mot de passe");
		if (!e.hasFieldErrors("oldPwd")) {

			if (!FieldValidatorUtil.isGoodLength(c.getOldPwd(), 5, 15)) {
				e
						.rejectValue("oldPwd", "key",
								"Votre ancien mot de passe doit contenir entre 5 et 15 caractères");
			}

			if (!FieldValidatorUtil.isAlphaNumString(c.getOldPwd())) {
				e
						.rejectValue("oldPwd", "key",
								"Votre ancien mot de passe contient des caratères interdits");
			}
		}

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "newPwd", "key",
				"Vous devez saisir votre nouveau mot de passe");
		if (!e.hasFieldErrors("newPwd")) {

			if (!FieldValidatorUtil.isGoodLength(c.getOldPwd(), 5, 15)) {
				e
						.rejectValue("newPwd", "key",
								"Votre nouveau mot de passe doit contenir entre 5 et 15 caractères");
			}

			if (!FieldValidatorUtil.isAlphaNumString(c.getOldPwd())) {
				e
						.rejectValue("newPwd", "key",
								"Votre nouveau mot de passe contient des caractères interdits");
			}
		}

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "confNewPwd", "key",
				"Vous devez confirmer votre nouveau mot de passe");
		if (!e.hasFieldErrors("confNewPwd")) {

			if (!c.getConfNewPwd().equals(c.getNewPwd())) {
				e.rejectValue("confNewPwd", "key",
						"Les deux nouveaux mots de passes ne sont pas égaux");
			}
		}

	}
}
